package com.yvan.dsf.anno;

import com.alibaba.dubbo.config.annotation.Service;
import org.springframework.core.annotation.AliasFor;
import org.springframework.stereotype.Component;

import java.lang.annotation.*;

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Service
@Component
public @interface DsfService {

    @AliasFor(annotation =Service.class,attribute = "interfaceClass")
    Class<?> interfaceClass() default void.class;

    @AliasFor(annotation =Service.class,attribute = "interfaceName")
    String interfaceName() default "";

    @AliasFor(annotation =Service.class,attribute = "version")
    String version() default "";

    @AliasFor(annotation =Service.class,attribute = "group")
    String group() default "";

    @AliasFor(annotation =Service.class,attribute = "path")
    String path() default "";

    @AliasFor(annotation =Service.class,attribute = "export")
    boolean export() default false;

    @AliasFor(annotation =Service.class,attribute = "token")
    String token() default "";

    @AliasFor(annotation =Service.class,attribute = "deprecated")
    boolean deprecated() default false;

    @AliasFor(annotation =Service.class,attribute = "dynamic")
    boolean dynamic() default false;

    @AliasFor(annotation =Service.class,attribute = "accesslog")
    String accesslog() default "";

    @AliasFor(annotation =Service.class,attribute = "executes")
    int executes() default 0;

    @AliasFor(annotation =Service.class,attribute = "register")
    boolean register() default false;

    @AliasFor(annotation =Service.class,attribute = "weight")
    int weight() default 0;

    @AliasFor(annotation =Service.class,attribute = "document")
    String document() default "";

    @AliasFor(annotation =Service.class,attribute = "delay")
    int delay() default 0;

    @AliasFor(annotation =Service.class,attribute = "local")
    String local() default "";

    @AliasFor(annotation =Service.class,attribute = "stub")
    String stub() default "";

    @AliasFor(annotation =Service.class,attribute = "cluster")
    String cluster() default "";

    @AliasFor(annotation =Service.class,attribute = "proxy")
    String proxy() default "";

    @AliasFor(annotation =Service.class,attribute = "connections")
    int connections() default 0;

    @AliasFor(annotation =Service.class,attribute = "callbacks")
    int callbacks() default 0;

    @AliasFor(annotation =Service.class,attribute = "onconnect")
    String onconnect() default "";

    @AliasFor(annotation =Service.class,attribute = "ondisconnect")
    String ondisconnect() default "";

    @AliasFor(annotation =Service.class,attribute = "owner")
    String owner() default "";

    @AliasFor(annotation =Service.class,attribute = "layer")
    String layer() default "";

    @AliasFor(annotation =Service.class,attribute = "retries")
    int retries() default 0;

    @AliasFor(annotation =Service.class,attribute = "loadbalance")
    String loadbalance() default "";

    @AliasFor(annotation =Service.class,attribute = "async")
    boolean async() default false;

    @AliasFor(annotation =Service.class,attribute = "actives")
    int actives() default 0;

    @AliasFor(annotation =Service.class,attribute = "sent")
    boolean sent() default false;

    @AliasFor(annotation =Service.class,attribute = "mock")
    String mock() default "";

    @AliasFor(annotation =Service.class,attribute = "validation")
    String validation() default "";

    @AliasFor(annotation =Service.class,attribute = "timeout")
    int timeout() default 0;

    @AliasFor(annotation =Service.class,attribute = "cache")
    String cache() default "";

    @AliasFor(annotation =Service.class,attribute = "filter")
    String[] filter() default {};

    @AliasFor(annotation =Service.class,attribute = "listener")
    String[] listener() default {};

    @AliasFor(annotation =Service.class,attribute = "parameters")
    String[] parameters() default {};

    @AliasFor(annotation =Service.class,attribute = "application")
    String application() default "";

    @AliasFor(annotation =Service.class,attribute = "module")
    String module() default "";

    @AliasFor(annotation =Service.class,attribute = "provider")
    String provider() default "";

    @AliasFor(annotation =Service.class,attribute = "protocol")
    String[] protocol() default {};

    @AliasFor(annotation =Service.class,attribute = "monitor")
    String monitor() default "";

    @AliasFor(annotation =Service.class,attribute = "registry")
    String[] registry() default {};
}
